(function(exports) {
	//0					+[]
	//1					+!+[]
	//1					+!![]
	//false				![]
	//true				!![]
	//true				!+[]
	//'10'				++[[]][+[]]+[+[]]
	//'10'				+!+[]+[]+(+[])
	//NaN				+[][[]]
	//'NaN'				+[][[]]+[]
	//undefined			[][[]]
	//'undefined'		[][[]]+[]
	//'NaNundefined'	[+[][[]]]+[][[]]
	//Infinity			(+!+[])/+[]
	//'Infinity'		(+!+[])/+[]+[]
	//'[object Object]'	[]+{}
	var c = [];
	c['0'] = '(+[]+[])';
	c['1'] = '(+!![]+[])';
	c['a'] = '(![]+[])[+!+[]]';
	c['b'] = '([]+{})[+!+[]+(!+[])]';
	c['c'] = '([]+{})[(+!+[]<<+!+[]<<+!+[])+!+[]]';
	c['d'] = '([][[]]+[])[+!+[]+!+[]]';
	c['e'] = '([][[]]+[])[+!![]+!![]+!![]]';
	c['f'] = '(![]+[])[+[]]';
	c['i'] = '((+!+[])/+[]+[])[+!![]+!![]+!![]]';
	c['j'] = '([]+{})[+!![]+!![]+!![]]';
	c['l'] = '(![]+[])[+!![]+!![]]';
	c['n'] = '([][[]]+[])[+!+[]]';
	c['o'] = '([]+{})[+!+[]]';
	c['r'] = '(!![]+[])[+!![]]';
	c['s'] = '(![]+[])[+!![]+!![]+!![]]';
	c['t'] = '(!![]+[])[+[]]';
	c['u'] = '([][[]]+[])[+[]]';
	c['y'] = '((+!+[])/+[]+[])[(+!+[]+(!+[])<<(+!+[]+(!+[])))-!+[]]';
	c['I'] = '((+!+[])/+[]+[])[+[]]';
	c['N'] = '(+[][[]]+[])[+[]]';
	c['['] = '([]+{})[+[]]';
	c[']'] = '([]+{})[((+!![]+!![])<<(+!![]+!![]+!![]))-!![]-!![]]';
	c[' '] = '([]+{})[((+!![]+!![])<<(+!![]+!![]))-!![]]';
	var os=exports.os={};
	os.getCharset=function(){
		var charset='';
		for(var ch in c){
			if(ch!=0)
			charset+=' ,'
			charset+=ch;
		}
		return charset;
	}
	os.generate = function(src) {
		console.log("src:" + src);
		if (!src || typeof src != 'string') return '~[Not string or empty]';
		var result = '';
		for (var i in src) {
			var s = src[i];
			if (i > 0) result += '+';
			result += c[s] ? c[s] : '[\'missing:' + s + '\'][+[]][(+!+[]+(!+[])<<(+!+[]+(!+[])))]'
		}
		return result;
	}
})(window);